#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Thu May  7 22:39:34 2020

@author: Mekakuactor
"""

from PIL import Image
import os
import sys
import os.path
import shutil
import glob

def IsValidImage(img_path):
    """
    判断文件是否为有效（完整）的图片
    :param img_path:图片路径
    :return:True：有效 False：无效
    """
    bValid = True
    try:
        Image.open(img_path).verify()
    except:
        bValid = False
    return bValid

def transimg(path):
    """
    转换图片格式
    :param img_path:图片路径
    :return: True：成功 False：失败
    """
    for filename in os.listdir(path):
        img_path = path + '/' + filename
        if IsValidImage(img_path):
            try:
                str = img_path.rsplit(".")
                if str[-1] == 'jpg':
                    pass
                else:
                    str = img_path.rsplit(".", 1)
                    output_img_path = str[0] + "zhuan" + ".jpg"
                    print(output_img_path)
                    im = Image.open(img_path)
                    rgb_im = im.convert('RGB')
                    rgb_im.save(output_img_path)
            except:
                print("error1:", img_path)
        else:
            print("error2:", img_path)

if __name__ == '__main__':
    path = './'
    print(transimg(path))

def fileDir() :
    path = ('./')

    #判断为脚本文件还是编译后文件，如果是脚本文件则返回脚本目录，否则返回编译后的文件路径
    if os.path.isdir( path ) :
        return path
    elif os.path.isfile( path ) :
        return os.path.dirname( path )
 
#获取文件后缀名
def suffix( file, *suffixName ) :
    array = map( file.endswith, suffixName )
    if True in array :
        return True
    else :
        return False
 
#删除目录下扩展名为.o,.exe,.bak的文件
def deleteFile() :
    targetDir = fileDir()
    for file in os.listdir( targetDir ) :
        targetFile = os.path.join( targetDir, file )
        if suffix( file, '.png', '.bmp', '.PNG', '.BMP', '.jpeg', '.JPEG', '.JPG'):
            os.remove( targetFile )
 
if __name__ == '__main__' :
    deleteFile()


class ImageRename():
    def __init__(self):
        self.path =('./') #需要将图片命名的文件夹路径

    def rename(self):
        filelist = os.listdir(self.path)
        totalnum = len(filelist)

        i = 1

        for item in filelist:
            if item.endswith(('.jpg','.JPG')):
                src = os.path.join(os.path.abspath(self.path),item)
                dst = os.path.join(os.path.abspath(
                    self.path),format(str(i)) + '.bak') #4为位数，如0001.
                os.rename(src,dst)
                i = i + 1


if __name__ == '__main__':
    newname = ImageRename()
    newname.rename()

class ImageRename():
    def __init__(self):
        self.path =('./') #需要将图片命名的文件夹路径

    def rename(self):
        filelist = os.listdir(self.path)
        totalnum = len(filelist)

        i = 1

        for item in filelist:
            if item.endswith('.bak'):
                src = os.path.join(os.path.abspath(self.path),item)
                dst = os.path.join(os.path.abspath(
                    self.path),format(str(i)) + '.jpg') #4为位数，如0001.
                os.rename(src,dst)
                i = i + 1


if __name__ == '__main__':
    newname = ImageRename()
    newname.rename()

DIR = './'
  
class Compress_Picture(object): 
  def __init__(self): 
    # 图片格式，可以换成.bpm等 
    self.file = '.jpg'
  
  # 图片压缩批处理 
  def compressImage(self): 
    for filename in glob.glob('%s%s%s' % (DIR, '*', self.file)): 
      # print(filename) 
      # 打开原图片压缩 
      sImg = Image.open(filename) 
      w, h = sImg.size 
      dImg = sImg.resize((int(w/2), int(h/2)), Image.ANTIALIAS) # 设置压缩尺寸和选项，注意尺寸要用括号 
  
      # 如果不存在目的目录则创建一个 
      comdic = "%s压缩后图片/"%DIR
      if not os.path.exists(comdic): 
        os.makedirs(comdic) 
  
      # 压缩图片路径名称 
      f1 = filename.split('/') 
      f1 = f1[-1].split('\\') 
      f2 = f1[-1].split('.') 
      f2 = '%s%s%s'%(comdic, f2[0], self.file) 
      # print(f2) 
      dImg.save(f2) # save这个函数后面可以加压缩编码选项JPEG之类的 
      print("%s compressed succeeded"%f1[-1]) 
  
  
if __name__ == "__main__": 
  obj = Compress_Picture() 
  obj.compressImage()

